/***********************************************************************************************//**
*\n  @file       bus_spi.hpp
*\n  @brief      spi 总线
*\n  @details
*\n -----------------------------------------------------------------------------------
*\n  文件说明：
*\n 	1. spi 总线 (控制spi转uart芯片sc16is752)
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:  	 修改人:       修改日期:        描述:
*\n  V0.01   罗先能        2021.05.10    创建
*\n
***************************************************************************************************/
#pragma once
#ifndef H_E72D05F4_7F85_4C9C_840D_B8E27C253303_
#define H_E72D05F4_7F85_4C9C_840D_B8E27C253303_

/**************************************************************************************************
* 头文件
***************************************************************************************************/
#include "bus.hpp"

/**************************************************************************************************
* 宏定义、结构定义
***************************************************************************************************/
#ifdef  __cplusplus //-- C only -----------------------------------------------------------
extern "C" {
#endif

// spi设备节点
#define SPI_TO_UART0 "/dev/spi2uart0"
#define SPI_TO_UART1 "/dev/spi2uart1"

// ioctl(cmd) 参数
// 读取channel0/1   中断状态值 bit[0~15]: channel0, bit[16~31]: channel1
#define GET_STATUS 	    _IOW('k', 0, int)
// #define SET_channleB 	_IOW('k', 1, int)
#define SET_STOP_BIT 	_IOW('k', 2, int)  /* 设置停止位1==1bit, 2=-1.5bit or 2bit */
#define SET_BPS 		_IOW('k', 3, int)  /* 设置波特率 */
#define SET_PARITY 		_IOW('k', 4, int)  /* 设置奇偶校验 0==none, 1=odd, 2=even */


#ifdef  __cplusplus //--C end -------------------------------------------------------------
}
#endif


/**************************************************************************************************
* 全局变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有变量声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 私有函数声明、定义
***************************************************************************************************/


/**************************************************************************************************
* 全局函数声明、定义
***************************************************************************************************/

#ifdef  __cplusplus //-- C++ only ---------------------------------------------------------
/*************************************************************************************//**
*\n 类名称： TSpiBus()
*\n 功能描述：
*\n            spi总线（接口实现）
*\n
*\n -----------------------------------------------------------------------------------
*\n  版本:   修改人:       修改日期:        描述:
*\n  V0.01 罗先能        2021.5.12     创建
*****************************************************************************************/
class TSpiBus : public TBus
{
public:
	TSpiBus(const char *name, const char *pDevicePath);
	virtual ~TSpiBus();

// -- 继承于基类 ----
public:
	// virtual int Init()                                           override;
	// virtual int Lock()                                           override;
	// virtual int Unlock()                                         override;
	virtual int Ioctl(long cmd,     void *pBuf)                  override;
	virtual int Read (long address, void *pBuf, long iCnt)       override;
	virtual int Write(long address, void *pBuf, long iCnt)       override;

public:
	// void* pBaseAddress;      ///< 基地址（虚拟地址）
	// long  mAddressSize;      ///< 地址长度

protected:
	// char mName[64];			 ///< 实例名称
	// pthread_rwlock_t mLock;  ///< 锁
	// int mFd;				 ///< 设备描述符

};
#endif //-- C++ end -------------------------------------------------------------------

#endif // H_E72D05F4_7F85_4C9C_840D_B8E27C253303_


